/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
 * main.c
 * Copyright (C) chemek anouar 2012 <anouar.chemek@esprit.tn>
	 *
 * Atelier3 is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
	 *
 * Atelier3 is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 50
void saisir_entete_message(char Message[][MAX]);
void saisir_corps_message(char Message[][MAX],int *L);
void get_time(char Message[][MAX],int *h,int *m,int *s);
void afficher_section_globale(char Message[][MAX]);
void afficher_corps_message(char Message[][MAX],int L);
int comparer_messages(char Message1[][MAX],char Message2[][MAX],int L1,int L2);
void comparer_temps(char Message1[][MAX], char Message2[][MAX],int *diff);
int main()
{
	int L1,L2,diff;

	char Message1[MAX][MAX] = {
		"FROM:",
		"TO:",
		"TIME:",
		"MESSAGE:"
	};
	char Message2[MAX][MAX] = {
		"FROM:",
		"TO:",
		"TIME:",
		"MESSAGE:"
	};

	/*printf("saisie du message 1\n");

	saisir_entete_message(Message1);
	saisir_corps_message(Message1,&L1);*/

	printf("saisie du message 2\n");

	saisir_entete_message(Message2);
	saisir_corps_message(Message2,&L2);

    printf("saisie achevé\n");

	/*afficher_section_globale(Message1);
	afficher_corps_message(Message1,L1);*/

	afficher_section_globale(Message2);
	afficher_corps_message(Message1,L2);

	if(comparer_messages(Message1,Message2,L1,L2))
		printf("les deux messages sont différents\n");
	else
		printf("les deux messages sont identiques\n");
	comparer_temps(Message1,Message2,&diff);
	if(!diff)
		printf("Les deux messages sont arrivés au même temps\n");
	else if(diff >0)
		printf("Le Message  M1 est arrivé aprés le Message M2\n");
	else
		printf("Le message M1 est arrivé avant M2\n");
	return (0);
}
//Écrire une fonction qui permet de saisir un message selon le format définis précédemment.
void saisir_entete_message(char Message[][MAX])
{
	int i,j,k;
	int lenght;
	char tmp[MAX];
	//Remplissage de la section globale (4 lignes)
	for(i=0; i<3; i++) {
		j=0;
		while(Message[i][j] != ':')
			j++;
		j++;
		switch(i) {
		case 0:
			printf("FROM: ");
			break;
		case 1:
			printf("TO: ");
			break;
		case 2:
			printf("TIME: ");
			break;
		}

		gets(tmp);//test
        //scanf("%s",tmp);
		lenght=0;
		while(tmp[lenght]!='\0')
			lenght++;		//lenght=strlen(tmp);

		for(k=0; k<lenght; k++)
			Message[i][k+j]=tmp[k];

            Message[i][k+j]='\0';
			puts(Message[i]);
	}
}
void saisir_corps_message(char Message[][MAX],int *L)
{
	int i;
	//char tmp[MAX]; //test
	//Remplissage de la section du message (L lignes)
	*L=0;
	printf("\n");
	printf("MESSAGE:\n");
	printf("donner le nombre de lignes : \n");
	scanf("%d",L);
	//printf("L=%d\n",*L);
	for(i=4; i<= *L + 4; i++) {
		printf("La %d ieme ligne:\n",i);
		gets(Message[i]);
		//scanf("%s",Message[i]);
	}

}
//Écrire une fonction qui permet de convertir la chaine 12:30:45 en heures, 	minutes et secondes.
void get_time(char Message[][MAX],int *h,int *m,int *s)
{
	char tmp[2];
	int j,k;
	j=0;

	//Heures

	//determination du premier délimiteur
	while(Message[2][j]!=':')
		j++;

    j++;//la position de la première case de l'heures

	k=j;
	while(Message[2][k] != ':') {
		tmp[k-j]=Message[2][k];//copie de l'heure dans la chaine tmp
		k++;
	}

	*h=atoi(tmp);                                                           //eg:TIME:10:20:30
    //printf("H=%d\n",*h);
	//Minutes

	k++; //la position de la première case des minutes

	j=k;
	while(Message[2][j]!=':') {
		tmp[j-k]=Message[2][j];//copie des minutes dans la chaine tmp
		j++;
	}

	*m=atoi(tmp);
	 //printf("M=%d\n",*m);

    //Secondes

	j++; //la position de la première case des secondes
	//j++;
	k=j;
	printf("K=%d\n",k);              //eg:TIME:10:20:30
	while(Message[2][k]!='\0') {    //Delimiter is \0 in this case not : :p
		tmp[k-j]=Message[2][k]; //copie des secondes dans la chaine tmp
		k++;
	}


	*s=atoi(tmp);
	 //printf("S=%d\n",*s);


}
void afficher_section_globale(char Message[][MAX])
{
	int H,M,S;
	int j,k,l;
	char expediteur[250];
	char destinataire[250];
	printf("test2\n");
	get_time(Message,&H,&M,&S);
	printf("test3\n");
	//printf("H=%d \t M=%d \t S=%d \n",H,M,S);
	j=0;
	while(Message[0][j] != ':')
		j++;
	j++; //position de la première case de l'expéditeur.
	k=0;

    printf("j=%d\n",j);

	puts(Message[0]);


    while(Message[0][j]!='\0')  //infinite loop :(  '\0' problem
        l++;

        printf("l=%d\n",l);

	while(Message[0][j]!='\0') {        //infinite loop :(  '\0' problem
	    //printf("k=%d\n",k);
		expediteur[k]=Message[0][j+k]; //ligne 0 (espediteur)
		k++;
	}
	//expediteur[k+1]='\0';
	puts(expediteur);

	while(Message[1][j] != '\0' ) {
		destinataire[k]=Message[1][j+k]; //ligne 1 (destinataire)
		k++;
	}
	destinataire[k+1]='\0';
	printf("est arriver à %d heure,%d minutes %d secondes, de la part de %s en destination de %s",H,M,S,expediteur,destinataire);
}
void afficher_corps_message(char Message[][MAX],int L)
{
	int i;
	char *tmp;
	for(i=4; i<L; i++) {
		tmp=Message[i];
		puts(tmp);
	}
}
int comparer_messages(char Message1[][MAX],char Message2[][MAX],int L1,int L2)
{
	int i;
	int flag=0;
	i=0;
	if (L1 != L2)
		return -1;
	while(i<L1 && !flag) {
		if(strcmp(Message1[i],Message2[i]) )
			flag=-1;
		else
			flag=0;
	}
	return flag;
}
void comparer_temps(char Message1[][MAX],char Message2[][MAX],int *diff)
{
	int H1,H2;
	int M1,M2;
	int S1,S2;
	get_time(Message1,&H1,&M1,&S1);
	get_time(Message2,&H2,&M2,&S2);
	*diff=(3600*H1+60*M1+S1)-(3600*H2+60*M2+S2);
}
